/* 智能指针（auto_ptr unique_ptr shared_ptr）是行为类似于指针的类对象。
   当智能指针过期时，其析构函数将使用delete来释放内存。
*/
// using three kinds of smart pointers
#include <iostream>
#include <string>
#include <memory>

class Report
{
private:
   std::string str;

public:
   Report(const std::string s) : str(s)
   {
      std::cout << "Object created!\n";
   }
   ~Report()
   {
      std::cout << "Object deleted!\n";
   }
   void comment() const { std::cout << str << "\n"; }
};

int main()
{
   // 每个智能指针都放在一个代码块内，这样离开代码块时，指针将过期。
   {
      std::auto_ptr<Report> ps(new Report("using auto_ptr"));
      ps->comment();
   }
   {
      std::shared_ptr<Report> ps(new Report("using shared_ptr"));
      ps->comment();
   }
   {
      std::unique_ptr<Report> ps(new Report("using unique_ptr"));
      ps->comment();
   }
   return 0;
}